1330742 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

さすらいのプログラマ

さすらいのプログラマ

DirectXを使ったMPEG2再生

DirectXを使ったMPEG2再生プログラムを作ってみました。 sample.mpgというMPEG2ファイルをフルスクリーンで再生します。
#include<stdio.h>
#include<dshow.h>
// strmiids.lib
#define FILENAME L"sample.mpg"

int main() {
  IGraphBuilder *pGraphBuilder;
  IMediaControl *pMediaControl;
  IMediaEvent *pMediaEvent;
  long eventCode;
  IVideoWindow *pVideoWindow;

  CoInitialize(NULL);

  CoCreateInstance(&CLSID_FilterGraph,
                   NULL,
                   CLSCTX_INPROC,
                   &IID_IGraphBuilder,
                   (LPVOID *)&pGraphBuilder);
  pGraphBuilder->lpVtbl->QueryInterface(pGraphBuilder,
                                        &IID_IMediaControl,
                                        (LPVOID *)&pMediaControl);
  pGraphBuilder->lpVtbl->QueryInterface(pGraphBuilder,
                                        &IID_IMediaEvent,
                                        (LPVOID *)&pMediaEvent);
  
  pMediaControl->lpVtbl->RenderFile(pMediaControl, FILENAME);
  // RenderFile以降で実施すること
  pGraphBuilder->lpVtbl->QueryInterface(pGraphBuilder,
                                        &IID_IVideoWindow,
                                        (LPVOID *)&pVideoWindow);
  pVideoWindow->lpVtbl->put_FullScreenMode(pVideoWindow, OATRUE);
  
  pMediaControl->lpVtbl->Run(pMediaControl);
  pMediaEvent->lpVtbl->WaitForCompletion(pMediaEvent, -1, &eventCode);

  pVideoWindow->lpVtbl->put_FullScreenMode(pVideoWindow, OAFALSE);
  
  pVideoWindow->lpVtbl->Release(pVideoWindow);
  pMediaEvent->lpVtbl->Release(pMediaEvent);
  pMediaControl->lpVtbl->Release(pMediaControl);
  pGraphBuilder->lpVtbl->Release(pGraphBuilder);

  CoUninitialize();

  return 0;
}


© Rakuten Group, Inc.